﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace App_Persistencia
{
    public class Pedido_Data
    {
        int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        DateTime fecha;

        public DateTime Fecha
        {
            get { return fecha; }
            set { fecha = value; }
        }
        List<Pedido_Detalle_Data> pedidoList;

        public List<Pedido_Detalle_Data> PedidoList
        {
            get { return pedidoList; }
            set { pedidoList = value; }
        }


        public void guardarPedido()
        {


            // Crear el Objeto de conexion, inicializa con la cadena de conexion
            string conexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
            System.Data.SqlClient.SqlConnection connection = new SqlConnection(conexion);

            // Abro la conexion
            connection.Open();

            //Invoco al Objeto SqlTransaction para manejar la transaccion  
            //ejecuto la transaccion
            SqlTransaction transaccion = connection.BeginTransaction();

            try
            {
                // Creo el Objeto Command, le asigno la conexion y el Procediminto a utilizar
                System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
                //Asigno a la propiedad Transaction del Objeto SqlCommand el valor del Objeto SqlTransaction
                command.Transaction = transaccion;
                //Asingo la conexion al objeto conection
                command.Connection = connection;
                command.CommandText = "spCargarPedido";
                command.CommandType = CommandType.StoredProcedure;

                // Declaro el Objeto de parametro
                System.Data.SqlClient.SqlParameter param;

                param = command.Parameters.AddWithValue("@fechaPedido", Fecha);// "8/20/2009 12:53:55 AM"
                param.DbType = DbType.DateTime;
                param.Direction = ParameterDirection.Input;

                // Establesco el parametro @SocDirDepto
                param = command.Parameters.AddWithValue("@pedId", Id);
                param.DbType = DbType.Int32;
                param.Direction = ParameterDirection.Output;


                // Ejecuto el procedimiento
                command.ExecuteNonQuery();

                Id = Convert.ToInt32(command.Parameters["@pedId"].Value);

                cargarDetallePedido(transaccion, connection);

                //Si no se genero ningun error en la carga ejecuto el commit
                transaccion.Commit();
            }
            catch (SystemException e)
            {
                //si se produjo algun error lo capturo y ejecuto el Rollback de la transaccion
                transaccion.Rollback();
                //provoco una Exepcion para la capa superior
                System.Diagnostics.Trace.Write(e.Message);

                throw new SystemException(e.Message);
            }
            finally
            {
                //Si termino la carga correctamente cierro la conexion
                connection.Close();
            }

        }

        public void cargarDetallePedido(SqlTransaction pTransaccion, SqlConnection pConnection)
        {
            for (int i = 0; i < PedidoList.Count; i++)
            {
                // Creo el Objeto Command, le asigno la conexion y el Procediminto a utilizar
                System.Data.SqlClient.SqlCommand commandDetalle = new System.Data.SqlClient.SqlCommand();
                //Asigno a la propiedad Transaction del Objeto SqlCommand el valor del Objeto SqlTransaction
                commandDetalle.Transaction = pTransaccion;
                //Asingo la conexion al objeto conection
                commandDetalle.Connection = pConnection;
                commandDetalle.CommandText = "spCargarDetallePedido";
                commandDetalle.CommandType = CommandType.StoredProcedure;

                // Declaro el Objeto de parametro
                System.Data.SqlClient.SqlParameter paramDetalle;

                // Establesco el parametro @SocDenom, uso como entrada los atributos de la clase
                paramDetalle = commandDetalle.Parameters.AddWithValue("@PedId", Id);
                paramDetalle.DbType = DbType.Int32;
                paramDetalle.Direction = ParameterDirection.Input;

                //// Establesco el parametro @EjeId, uso como entrada los atributos de la clase
                paramDetalle = commandDetalle.Parameters.AddWithValue("@pedCant", PedidoList[i].Cantidad);
                paramDetalle.DbType = DbType.Double;
                paramDetalle.Direction = ParameterDirection.Input;


                paramDetalle = commandDetalle.Parameters.AddWithValue("@pedInsId", PedidoList[i].Insumo.Id);
                paramDetalle.DbType = DbType.Int32;
                paramDetalle.Direction = ParameterDirection.Input;

                // Ejecuto el procedimiento
                commandDetalle.ExecuteNonQuery();

            }
        }


    }
}
